
package com.sforce.soap.enterprise.sobject;

import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlType;
import com.sforce.soap.enterprise.QueryResult;


/**
 * <p>OutgoingEmail complex typeのJavaクラス。
 * 
 * <p>次のスキーマ・フラグメントは、このクラス内に含まれる予期されるコンテンツを指定します。
 * 
 * <pre>
 * &lt;complexType name="OutgoingEmail">
 *   &lt;complexContent>
 *     &lt;extension base="{urn:sobject.enterprise.soap.sforce.com}sObject">
 *       &lt;sequence>
 *         &lt;element name="BccAddress" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="BccIds" type="{urn:enterprise.soap.sforce.com}ID" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="CcAddress" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="CcIds" type="{urn:enterprise.soap.sforce.com}ID" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="ContentDocumentIds" type="{urn:enterprise.soap.sforce.com}ID" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="ContentDocumentLinks" type="{urn:enterprise.soap.sforce.com}QueryResult" minOccurs="0"/>
 *         &lt;element name="ExternalId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="HtmlBody" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="OutgoingEmailRelations" type="{urn:enterprise.soap.sforce.com}QueryResult" minOccurs="0"/>
 *         &lt;element name="RelatedTo" type="{urn:sobject.enterprise.soap.sforce.com}Name" minOccurs="0"/>
 *         &lt;element name="RelatedToId" type="{urn:enterprise.soap.sforce.com}ID" minOccurs="0"/>
 *         &lt;element name="Subject" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="TextBody" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="ToAddress" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="ToIds" type="{urn:enterprise.soap.sforce.com}ID" maxOccurs="unbounded" minOccurs="0"/>
 *         &lt;element name="ValidatedFromAddress" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="Who" type="{urn:sobject.enterprise.soap.sforce.com}Name" minOccurs="0"/>
 *         &lt;element name="WhoId" type="{urn:enterprise.soap.sforce.com}ID" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/extension>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "OutgoingEmail", propOrder = {
    "bccAddress",
    "bccIds",
    "ccAddress",
    "ccIds",
    "contentDocumentIds",
    "contentDocumentLinks",
    "externalId",
    "htmlBody",
    "outgoingEmailRelations",
    "relatedTo",
    "relatedToId",
    "subject",
    "textBody",
    "toAddress",
    "toIds",
    "validatedFromAddress",
    "who",
    "whoId"
})
public class OutgoingEmail
    extends SObject
{

    @XmlElementRef(name = "BccAddress", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> bccAddress;
    @XmlElement(name = "BccIds", nillable = true)
    protected List<String> bccIds;
    @XmlElementRef(name = "CcAddress", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> ccAddress;
    @XmlElement(name = "CcIds", nillable = true)
    protected List<String> ccIds;
    @XmlElement(name = "ContentDocumentIds", nillable = true)
    protected List<String> contentDocumentIds;
    @XmlElementRef(name = "ContentDocumentLinks", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<QueryResult> contentDocumentLinks;
    @XmlElementRef(name = "ExternalId", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> externalId;
    @XmlElementRef(name = "HtmlBody", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> htmlBody;
    @XmlElementRef(name = "OutgoingEmailRelations", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<QueryResult> outgoingEmailRelations;
    @XmlElementRef(name = "RelatedTo", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<Name> relatedTo;
    @XmlElementRef(name = "RelatedToId", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> relatedToId;
    @XmlElementRef(name = "Subject", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> subject;
    @XmlElementRef(name = "TextBody", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> textBody;
    @XmlElementRef(name = "ToAddress", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> toAddress;
    @XmlElement(name = "ToIds", nillable = true)
    protected List<String> toIds;
    @XmlElementRef(name = "ValidatedFromAddress", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> validatedFromAddress;
    @XmlElementRef(name = "Who", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<Name> who;
    @XmlElementRef(name = "WhoId", namespace = "urn:sobject.enterprise.soap.sforce.com", type = JAXBElement.class, required = false)
    protected JAXBElement<String> whoId;

    /**
     * bccAddressプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getBccAddress() {
        return bccAddress;
    }

    /**
     * bccAddressプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setBccAddress(JAXBElement<String> value) {
        this.bccAddress = value;
    }

    /**
     * Gets the value of the bccIds property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the bccIds property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getBccIds().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link String }
     * 
     * 
     */
    public List<String> getBccIds() {
        if (bccIds == null) {
            bccIds = new ArrayList<String>();
        }
        return this.bccIds;
    }

    /**
     * ccAddressプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getCcAddress() {
        return ccAddress;
    }

    /**
     * ccAddressプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setCcAddress(JAXBElement<String> value) {
        this.ccAddress = value;
    }

    /**
     * Gets the value of the ccIds property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the ccIds property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getCcIds().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link String }
     * 
     * 
     */
    public List<String> getCcIds() {
        if (ccIds == null) {
            ccIds = new ArrayList<String>();
        }
        return this.ccIds;
    }

    /**
     * Gets the value of the contentDocumentIds property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the contentDocumentIds property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getContentDocumentIds().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link String }
     * 
     * 
     */
    public List<String> getContentDocumentIds() {
        if (contentDocumentIds == null) {
            contentDocumentIds = new ArrayList<String>();
        }
        return this.contentDocumentIds;
    }

    /**
     * contentDocumentLinksプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link QueryResult }{@code >}
     *     
     */
    public JAXBElement<QueryResult> getContentDocumentLinks() {
        return contentDocumentLinks;
    }

    /**
     * contentDocumentLinksプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link QueryResult }{@code >}
     *     
     */
    public void setContentDocumentLinks(JAXBElement<QueryResult> value) {
        this.contentDocumentLinks = value;
    }

    /**
     * externalIdプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getExternalId() {
        return externalId;
    }

    /**
     * externalIdプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setExternalId(JAXBElement<String> value) {
        this.externalId = value;
    }

    /**
     * htmlBodyプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getHtmlBody() {
        return htmlBody;
    }

    /**
     * htmlBodyプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setHtmlBody(JAXBElement<String> value) {
        this.htmlBody = value;
    }

    /**
     * outgoingEmailRelationsプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link QueryResult }{@code >}
     *     
     */
    public JAXBElement<QueryResult> getOutgoingEmailRelations() {
        return outgoingEmailRelations;
    }

    /**
     * outgoingEmailRelationsプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link QueryResult }{@code >}
     *     
     */
    public void setOutgoingEmailRelations(JAXBElement<QueryResult> value) {
        this.outgoingEmailRelations = value;
    }

    /**
     * relatedToプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link Name }{@code >}
     *     
     */
    public JAXBElement<Name> getRelatedTo() {
        return relatedTo;
    }

    /**
     * relatedToプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link Name }{@code >}
     *     
     */
    public void setRelatedTo(JAXBElement<Name> value) {
        this.relatedTo = value;
    }

    /**
     * relatedToIdプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getRelatedToId() {
        return relatedToId;
    }

    /**
     * relatedToIdプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setRelatedToId(JAXBElement<String> value) {
        this.relatedToId = value;
    }

    /**
     * subjectプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getSubject() {
        return subject;
    }

    /**
     * subjectプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setSubject(JAXBElement<String> value) {
        this.subject = value;
    }

    /**
     * textBodyプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getTextBody() {
        return textBody;
    }

    /**
     * textBodyプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setTextBody(JAXBElement<String> value) {
        this.textBody = value;
    }

    /**
     * toAddressプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getToAddress() {
        return toAddress;
    }

    /**
     * toAddressプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setToAddress(JAXBElement<String> value) {
        this.toAddress = value;
    }

    /**
     * Gets the value of the toIds property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the toIds property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getToIds().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link String }
     * 
     * 
     */
    public List<String> getToIds() {
        if (toIds == null) {
            toIds = new ArrayList<String>();
        }
        return this.toIds;
    }

    /**
     * validatedFromAddressプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getValidatedFromAddress() {
        return validatedFromAddress;
    }

    /**
     * validatedFromAddressプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setValidatedFromAddress(JAXBElement<String> value) {
        this.validatedFromAddress = value;
    }

    /**
     * whoプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link Name }{@code >}
     *     
     */
    public JAXBElement<Name> getWho() {
        return who;
    }

    /**
     * whoプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link Name }{@code >}
     *     
     */
    public void setWho(JAXBElement<Name> value) {
        this.who = value;
    }

    /**
     * whoIdプロパティの値を取得します。
     * 
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public JAXBElement<String> getWhoId() {
        return whoId;
    }

    /**
     * whoIdプロパティの値を設定します。
     * 
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code <}{@link String }{@code >}
     *     
     */
    public void setWhoId(JAXBElement<String> value) {
        this.whoId = value;
    }

}
